Unityでzipを使って圧縮データを作る


概要

SharpZipLibを使って、Unity内でデータを圧縮する。


下記ライブラリが有用。

https://github.com/icsharpcode/SharpZipLib



用途

書き溜めたログファイルを圧縮して送りたくなったよ!!

という異端な用途を満たしたい欲求からスタート。



手段

ローカルでファイルに吐き出す必要は無いので、

path -> byte []

byte [] -> byte []

なものをサクッと用意してみる。



コード

ビルドすると下記libができるので、

ICSharpCode.SharpZipLib.dll


これと下記コードで。


/**

compress data from path

*/

public static byte [] ZipFromFile(string filePath) {

using (var fileStreamIn = new FileStream(filePath, FileMode.Open, FileAccess.Read)) {

using (var memoryStreamOut = new MemoryStream()) {

using (ZipOutputStream zipOutStream = new ZipOutputStream(memoryStreamOut)) {

byte[] buffer = new byte[4096];


// get zipped-file name from filePath.

var name = Path.GetFileName(filePath);


ZipEntry entry = new ZipEntry(name);

entry.DateTime = DateTime.Now;

zipOutStream.PutNextEntry(entry);


int size;

do {

size = fileStreamIn.Read(buffer, 0, buffer.Length);

zipOutStream.Write(buffer, 0, size);

} while (size > 0);


zipOutStream.Finish();


zipOutStream.Close();

}

return memoryStreamOut.ToArray();

}

}

}


/**

compress data from bytes

*/

public static byte [] ZipFromBytes(byte [] data, string asName="DEFAULT_NAME") {


using (var memoryStreamIn = new MemoryStream(data)) {


using (var memoryStreamOut = new MemoryStream()) {



using (ZipOutputStream zipOutStream = new ZipOutputStream(memoryStreamOut)) {

byte[] buffer = new byte[4096];


ZipEntry entry = new ZipEntry(asName);

entry.DateTime = DateTime.Now;

zipOutStream.PutNextEntry(entry);


int size;

do {

size = memoryStreamIn.Read(buffer, 0, buffer.Length);

zipOutStream.Write(buffer, 0, size);

} while (size > 0);


zipOutStream.Finish();


zipOutStream.Close();

}

return memoryStreamOut.ToArray();

}

}

}


内容は適当なので、ブラッシュアップとかしたい。

ともあれ

path -> zipped byte []

byte [] -> zipped byte []

が出来る感じ。



アイドル自由入力行

dfgfgっhjきzdgfdfgvbhじこ


↑アイドルがかってにかきました。